home *** CD-ROM | disk | FTP | other *** search
/ Scene Storm / Scene Storm - Volume 1.iso / coding / asm / games / texturemapping / makeltable.c < prev    next >
C/C++ Source or Header  |  1980-01-03  |  2KB  |  113 lines

  1. #include <exec/types.h>
  2. #include <clib/exec_protos.h>
  3. #include <graphics/view.h>
  4. #include <stdio.h>
  5. #include <dos/dos.h>
  6. #include <math.h>
  7. #define NO_PRAGMAS 1
  8. #include "pd:ifflib/iff.h"
  9.  
  10. #pragma libcall IFFBase OpenIFF 1e 801
  11. #pragma libcall IFFBase CloseIFF 24 901
  12. #pragma libcall IFFBase FindChunk 2a 902
  13. #pragma libcall IFFBase GetBMHD 30 901
  14. #pragma libcall IFFBase GetColorTab 36 8902
  15. #pragma libcall IFFBase DecodePic 3c 8902
  16. #pragma libcall IFFBase SaveBitMap 42 a9804
  17. /*#pragma libcall IFFBase SaveClip 48 210a9808*/
  18. #pragma libcall IFFBase IFFError 4e 0
  19. #pragma libcall IFFBase GetViewModes 54 901
  20. #pragma libcall IFFBase NewOpenIFF 5a 802
  21. #pragma libcall IFFBase ModifyFrame 60 8902
  22.  
  23. struct Library *IFFBase,*GfxBase;
  24. ULONG *infile;
  25.  
  26. void Fail(char *msg)
  27. {
  28.     if (msg) printf("%s\n",msg);
  29.     if (infile) CloseIFF(infile);
  30.     if (IFFBase) CloseLibrary(IFFBase);
  31.     exit(0);
  32. }
  33.  
  34.  
  35. struct Library *openlib(char *name,ULONG version)
  36. {
  37.     struct Library *t1;
  38.     t1=OpenLibrary(name,version);
  39.     if (! t1)
  40.     {
  41.         printf("error- needs %s version %d\n",name,version);
  42.         Fail(0l);
  43.     }
  44.     else return(t1);
  45. }
  46.  
  47.  
  48.  
  49.  
  50. int curout=0;
  51.  
  52. outb(c)
  53. {
  54.     if (! curout) printf("\n\tdc.b\t"); else printf(",");
  55.     printf("$%02x",c);
  56.     curout++;
  57.     if (curout==15) curout=0;
  58. }
  59.  
  60. struct Colormap *mycm;
  61.  
  62. ULONG r[256],g[256],b[256];
  63.  
  64. main(argc,argv)
  65. int argc;
  66. char **argv;
  67. {
  68.     IFFBase=openlib("iff.library",0);
  69.     GfxBase=openlib("graphics.library",39);
  70.     if (argc==3)
  71.     {
  72.         if (infile=OpenIFF(argv[1]))
  73.         {
  74.             ULONG *form,*chunk;
  75.             ULONG count;
  76.             UBYTE *ptr;
  77.             ULONG i;
  78.             double lightvalue;
  79.  
  80.             lightvalue=atof(argv[2]);
  81.             mycm=GetColorMap(256l);
  82.             chunk=FindChunk(infile,ID_CMAP);
  83.             if (! chunk) Fail("no color table");
  84.             chunk++;
  85.             count=(*(chunk++))/3;
  86.             ptr=chunk;
  87.             if (count>256) count=256;
  88.             for(i=0;i<count;i++)
  89.             {
  90.                 r[i]=*(ptr++)<<24;
  91.                 g[i]=*(ptr++)<<24;
  92.                 b[i]=*(ptr++)<<24;
  93.                 SetRGB32CM(mycm,i,r[i],g[i],b[i]);
  94.             }
  95.  
  96.             printf("; light table for radiance=%1.2f\n",lightvalue);
  97.             for(i=0;i<256;i++)
  98.             {
  99.                 int found;
  100.                 double r1,g1,b1;
  101.                 r1=r[i]*lightvalue;
  102.                 g1=g[i]*lightvalue;
  103.                 b1=b[i]*lightvalue;
  104.                 found=FindColor(mycm,(ULONG) r1,(ULONG) g1, (ULONG) b1,127);
  105.                 outb(found);
  106.             }
  107.  
  108.             printf("\n");
  109.             Fail(0);
  110.         }
  111.     } else Fail("can't open file");
  112. }
  113.